Cloud computing is the provision of dynamically scalable and often virtualized resources as a service over the Internet on a utility basis. Users do not have to have any knowledge of, expertise in, or control over the technology infrastructure in the “cloud” that supports them. People only pay for what they need, and can increase and decrease usage at any minute. Cloud computing services often provide common business applications online that are accessed from a web browser, while the software and data are stored on the servers.
Cloud computing customers do not generally own the physical infrastructure serving as host to the software platform in question. They typically consume resources as a service and pay only for resources that they use. The majority of cloud computing infrastructures consist of reliable services delivered through data centers and built on servers with different levels of virtualization technologies. The services are accessible anywhere that provides access to networking infrastructure. Clouds often appear as single points of access for all consumers' computing needs.
The rise of the virtualization environment has provided for the advent of virtual machines (VMs). In computer science, a VM is a portion of software that, when executed on appropriate hardware, creates an environment allowing the virtualization of an actual physical computer system. Each VM may function as a self-contained platform, running its own operating system (OS) and software applications (processes). Typically, a virtual machine monitor (VMM) manages allocation and virtualization of computer resources and performs context switching, as may be necessary, to cycle between various VMs. Virtualization systems provide a potential means to access computing resources in a confidential and anonymous way. VMs are an ideal infrastructure to provide computing resources in cloud computing and are currently utilized in this way.
Cloud computing cannot be complete without a way to move VM workloads from one cloud to the other. This capability should be quick, reliable, and transparent to the end users of the VM that is hosted in a cloud. Without such capabilities, people will be locked into a particular cloud, and there will not be any “spill over” capabilities.
One current solution to provide inter-cloud VM workload migration is to re-architect applications to support inter-cloud migration from the beginning. An example of such architecture is a three-tier web architecture with local replicated databases that are mostly read-only. Another example is that of batch workloads. The disadvantage of a re-architecture is that it is very costly, and not all workloads can be naturally re-architected.
Another solution for inter-cloud VM workload migration is to set up permanent network tunnels between clouds so that any resources in the cloud that is the target for a migration appear local to the source cloud. In some instances, this can also be combined with live migration of compute and disk resources. The disadvantage here is that the network tunnels are permanent. This incurs a performance hit, a cost, and only works naturally if there's a definite “source” for the workload. When thinking of a world-wide infrastructure in which workloads can be started anywhere and moved anywhere, and where any internal cloud, if it exists, is a peer amongst equals, such a scheme is not ideal.